package main

import "fmt"

func total(n int) {
	num := 0
	if n > 0 {
		num += n
		n--
		//total(n)
		fmt.Println(num)
	}
}
func add(n int) int {
	if n > 1 {
		return n + add(n-1)
	} else {
		return 1
	}
}

//创建闭包
func adder() func() int {
	var i = 10
	return func() int {
		return i + 1
	}
}
func adder1() func(y int) int {
	var i = 10 //常驻内存 不污染全局
	return func(y int) int {
		return i + y
	}
}
func main() {
	//1.实现1-100的和
	var num = 0
	for i := 1; i <= 100; i++ {
		num += i
	}
	fmt.Println(num) //5050
	//total(10)
	num1 := add(100) //5050
	fmt.Println(num1)
	//2.闭包 就是有权访问另一个函数作用域中的变量 的函数
	//2.1 创建闭包的常用方式  就是在一个函数中创建另一个函数
	fmt.Println(adder())
	a := adder()
	fmt.Println(a()) //10
	fmt.Println(a()) //10
	a1 := adder1()
	fmt.Println(a1(10)) //20
	fmt.Println(a1(20)) //30 //常驻内存 不污染全局

}
